![PythonでBigQueryにスケジュールされたクエリを一覧・削除してみた](https://devio2023-media.developers.io/wp-content/uploads/2020/09/gcp-eyecatch-bigquery_1200x630.png)
PythonでBigQueryにスケジュールされたクエリを一覧・削除してみた
データアナリティクス事業本部の鈴木です。
Pythonから、BigQueryにスケジュールしたクエリを確認・削除したいことがありました。
今回は以下のPython Client for BigQuery Data Transfer APIを使用した方法を試してみたので、ご紹介します。
準備
前提
今回、PythonスクリプトはCloudShellから実行しました。
CloudShellにはクライアントがインストールされていなかったので、以下のコマンドでインストールしました。
python3 -m pip install google-cloud-bigquery-datatransfer
使用したツールのバージョンは以下になります。
- python: 3.9.2
- google.cloud.bigquery: 3.0.1
- google-cloud-bigquery-datatransfer: 3.6.1
データ転送の設定
一覧取得方法をみていくのに、なにも設定されていないと結果が分からないので、2件スケジュールを設定しておきました。
- スケジュールされたクエリ1件
- Google Cloud Storageからのデータ転送1件
ポイントが分かりやすいよう、スケジュールされたクエリに加えて、Google Cloud Storageからのデータ転送を設定しておきました。
今回設定の詳細は気にしなくても大丈夫なので割愛します。概要としては、BigQueryにsample_dataset
という適当なデータセットを作っておき、その下に適当なテーブルを作っておきました。そのテーブルをSELECTして、別名で保存するようなクエリをスケジュール設定しておきました。Google Cloud Storageからのデータ転送は、適当なCSVファイルをこのデータセットにスケジュールに合わせて転送するようなものを作成しておきました。
各々、以下のようなものができました。
スケジュールされたクエリ
Google Cloud Storageからのデータ転送
ソース
の欄が種類に合ったものになっているところが、後でポイントになります。
もし設定方法が気になる場合は、以下のガイドをご覧ください。
やってみる
スケジュールしたクエリの表示
まず、list_transfer_configs
でデータ転送の情報を取得してみました。
ガイドのうち、以下の記載を参考に、コードを作成・実行してみました。
コードは以下になります。
from google.cloud import bigquery_datatransfer client = bigquery_datatransfer.DataTransferServiceClient() # Initialize request argument(s) request = bigquery_datatransfer.ListTransferConfigsRequest(parent="projects/プロジェクトID/locations/asia-northeast1") # Make the request page_result = client.list_transfer_configs(request=request) # Handle the response for response in page_result: print(response)
parent
には、一覧を表示する対象のプロジェクト情報を渡しました。プロジェクトID
はクエリをスケジュールしたプロジェクトIDを記載します。また、リージョンは今回東京リージョンに設定したので、asia-northeast1
を入れておきました。
page_result
はListTransferConfigsPager
オブジェクトで、反復処理することでデータ転送の情報を取得することが可能です。データ転送の情報については、以下のドキュメントのTransferConfig
の値を参照しました。
例えば、以下のようなコードで、転送構成のリソース名・表示名・データソースのIDを取得することが出来ました。
from google.cloud import bigquery_datatransfer client = bigquery_datatransfer.DataTransferServiceClient() # Initialize request argument(s) request = bigquery_datatransfer.ListTransferConfigsRequest(parent="projects/プロジェクトID/locations/asia-northeast1") # Make the request page_result = client.list_transfer_configs(request=request) # Handle the response for response in page_result: print(response.name) print(response.display_name) print(response.data_source_id)
結果は以下のようになります。
ちょうど2つ設定していたので、全て取得できていることが分かりました。
特に、data_source_id
の値は、準備のセクションでみたデータソースのIDに対応しているので、これを使うことで、スケジュールされたクエリだけなど、特定の種別をフィルタすることもできそうでした。
スケジュールしたクエリの削除
転送構成のリソース名を取得することで、BigQuery Data Transfer APIからスケジュールしたクエリを削除することが可能そうでしたのでやってみました。
ガイドのうち、以下のdelete_transfer_config
の記載を参考に、コードを作成・実行してみました。
コードは以下になります。転送構成のリソース名
には、上記で取得した転送構成のリソース名を入れます。これはコンソールからでも確認できます。
from google.cloud import bigquery_datatransfer # Create a client client = bigquery_datatransfer.DataTransferServiceClient() # Initialize request argument(s) request = bigquery_datatransfer.DeleteTransferConfigRequest( name="転送構成のリソース名", ) # Make the request client.delete_transfer_config(request=request)
実行すると、クエリのスケジュール設定が削除されることが確認できました。
最後に
今回はPython Client for BigQuery Data Transfer APIを使って、すでに設定されているデータ転送の一覧と、その中からスケジュールされたクエリの設定を確認する方法をやってみました。また、取得した転送構成のリソース名を使って、クエリのスケジュール設定を削除してみました。
特に一覧取得時には、種別が分かるようになっているので、その値によって管理することができそうでよかったです。